package com.tarry.decorate.optimize;

/**
 * 结合装饰者模式，实现堆煎饼加料的扩展
 * <p>
 *     装饰者模式更多的时考虑扩展，与静态代理最大的区别在于职责不同；
 *     静态代理不一定满足is-a的关系，静态代理的目的时功能增强，同一个职责变得不一样。
 * </p>
 */
public class BatterCakeClient {
    public static void main(String[] args) {
        BatterCake batterCake;
        // 普通煎饼
        batterCake = new BaseBatterCake();
        System.out.printf("%s,总价为：%d。\n",batterCake.getMsg(),batterCake.getPrice());
        // 加鸡蛋
        batterCake = new EggDecorator(batterCake);
        System.out.printf("%s,总价为：%d。\n",batterCake.getMsg(),batterCake.getPrice());
        // 加香肠
        batterCake = new SausageDecorate(batterCake);
        System.out.printf("%s,总价为：%d。\n",batterCake.getMsg(),batterCake.getPrice());
    }
}
